package com.wans.user.common.util;

import com.wans.user.common.em.UserRegisterEnum;
import com.wans.user.exception.UserRegisterException;
import com.wans.model.user.dtos.UserDTO;

@SuppressWarnings("all")
public class UserDTOValidationUtils {

    public static boolean validateUserDTO(UserDTO userDTO) {

        // 校验 userDTO 是否有null值 - 全有继续执行
        if (checkUserContentNull(userDTO))
            throw new UserRegisterException(UserRegisterEnum.USER_INFO_NULL_ERROR);

        // 校验账号基本信息
        checkUserAccount(userDTO.getAccount());

        // 校验密码基本信息
        checkUserPassword(userDTO.getPassword());

        return true;
    }


    /**
     * 检查 userDTO 是否为 null
     *
     * @param userDTO userDTO - 用户注册类
     * @return 类、属性 - 只要有一个是 null 则返回 true，全部有值才返回 false
     */
    private static boolean checkUserContentNull(UserDTO userDTO) {

        if (userDTO == null) return true;

        if (userDTO.getAccount() == null) return true;

        if (userDTO.getPassword() == null) return true;


        return false;
    }


    /**
     * 校验账号 - 1.校验长度
     *           2.校验字符
     * @param account 账号
     */
    private static void checkUserAccount(String account) {

        if (account.length() < 5 | account.length() > 15)
            // 长度 低于 5 位， 高于 15 位
            throw new UserRegisterException(UserRegisterEnum.USER_ACCOUNT_LENGTH_ERROR);

        if(!account.matches("^[A-Za-z0-9_]+$"))
            // 包含除了 大写字母、小写字母、数字、_ 的其他字符
            throw new UserRegisterException(UserRegisterEnum.USER_ACCOUNT_CONTENT_ERROR);

    }

    /**
     * 校验密码 - 1.校验长度
     *           2.校验字符
     * @param password
     */
    private static void checkUserPassword(String password) {
        if (password.length() < 5 | password.length() > 18)
            // 长度 低于 5 位， 高于 18 位
            throw new UserRegisterException(UserRegisterEnum.USER_PASSWORD_LENGTH_ERROR);

        if(!password.matches("^[A-Za-z0-9_]+$"))
            // 包含除了 大写字母、小写字母、数字、_ 的其他字符
            throw new UserRegisterException(UserRegisterEnum.USER_PASSWORD_CONTENT_ERROR);
    }
}
